// 确定 nums只含有3种颜色 0 1 2 
/**
 * @desc reduce 函数 
 * reduce(callback,iniValue)
 *      callback是执行数组中每个值的函数
 *          callback(accumulator,curValue,curIndex,arr)
 *              累加器之前的结果，当前元素值，当前元素索引，正在处理的arr
 *      inivalue    
 *          用作第一个调用 callback的第一个参数的值
 *          如果没有设置，则默认为数组中的第一个元素
 * 
 *  reduce 实现累加
 *      add(arr){
 *          return arr.reduce((before,after)=>before+after)
 *      }
 */

 //let res = add([1, 2, 3, 4]);
 //console.log(res)
function add(arr){
   // return arr.reduce((before,after)=>before+after) // 10
   return arr.reduce((before,after)=>before+after,5)// 输出的是15 
}

let nums = [1,2,2,2,0];
nums.reduce((agg, num) => {
    console.log(agg)
    agg[num]++;
    return agg;
}, [0, 0, 0]);


var sortColors = function(nums) {
    const counts = nums.reduce((agg, num) => {
        console.log(agg)
        agg[num]++;
        return agg;
    }, [0, 0, 0]);
   
    
    let index = 0;
    while(index<nums.length){
        for (let i = 0; i < 3; i++) {
            if (counts[i]-- >0) {
                nums[index++] = i;
                break;
            }
        }
    }
};